package bean;

import burp.IBurpExtenderCallbacks;
import burp.IExtensionHelpers;
import burp.IHttpRequestResponse;
import com.sun.tools.jdeprscan.scan.Scan;
import scanner.Scanner;
import tools.DNSMonitor;

import java.util.HashMap;

/**
 * Author: 4ut15m.4ny0neSec
 * Date: 2022/2/8
 * Desc: 所有Bean的父类.
 * 连接burp与扫描模块的，bean会打包burp的所有信息。
 * 不同扫描模块在使用bean时应当重新new属于自己的bean，切忌一个bean用在多个模块上。
 * */
public class Bean {

    // private 属性
    /**
     * Desc:
     * 使用当前bean的扫描模块，比如通过bean传递参数给ConfluenceScanner时，Scanner=Confluence
     * 这个要求在实例化bean对象时就给定，后续不允许修改，主要起一个标识的作用
     * */
    private String Scanner;

    /**
     * Desc:
     * 请求的所有内容皆在该对象中
     * */
    private ReqAll reqAll;
    /**
     * Desc:
     * 标配dnsmonitor，用来操作burpsuite自带的dnslog服务器
     * */
    private DNSMonitor dnsMonitor;

    private IBurpExtenderCallbacks callbacks;
    private IExtensionHelpers helpers;

    /**
     * Desc:
     * 界面传入的请求包内容
     * */
    private String reqPackage;

    public Bean(IBurpExtenderCallbacks callbacks){
        setCallbacks(callbacks);
        setHelpers(callbacks.getHelpers());
        setReqAll(new ReqAll());
    }

    public String getModule(){
        return Scanner;
    }

    /**
     * Desc:
     * DnsMonitor的set/get方法
     * */
    public void setDnsMonitor(DNSMonitor dnsMonitor) {
        this.dnsMonitor = dnsMonitor;
    }

    public DNSMonitor getDnsMonitor() {
        return dnsMonitor;
    }

    /**
     * Desc:
     * IBurpExtenderCallbacks的set/get方法
     * */
    public void setCallbacks(IBurpExtenderCallbacks callbacks) {
        this.callbacks = callbacks;
    }

    public IBurpExtenderCallbacks getCallbacks() {
        return callbacks;
    }

    /**
     * IExtensionHelpers的set/get方法
     * 可以手动指定helpers来赋值，也可以通过传入null来获取helpers
     * */
    public void setHelpers(IExtensionHelpers helpers) {
        if(helpers != null){
            this.helpers = helpers;
            return;
        }
        this.helpers = callbacks.getHelpers();
    }

    public IExtensionHelpers getHelpers() {
        return helpers;
    }

    public void setReqPackage(String reqPackage) {
        this.reqPackage = reqPackage;
    }

    /**
     * Desc:
     * ReqAll的set与get方法
     * */
    public ReqAll getReqAll() {
        return reqAll;
    }

    public void setReqAll(ReqAll reqAll) {
        this.reqAll = reqAll;
    }

}
